<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Foo struct | My Project</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
  <link rel="stylesheet" href="m-dark+documentation.compiled.css" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<header><nav id="navigation">
  <div class="m-container">
    <div class="m-row">
      <a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Project</a>
    </div>
  </div>
</nav></header>
<main><article>
  <div class="m-container m-container-inflatable">
    <div class="m-row">
      <div class="m-col-l-10 m-push-l-1">
        <h1>
          Foo <span class="m-thin">struct</span>
        </h1>
        <p>Pathological cases of function attributes.</p>
        <nav class="m-block m-default">
          <h3>Contents</h3>
          <ul>
            <li>
              Reference
              <ul>
                <li><a href="#pub-static-attribs">Public static variables</a></li>
                <li><a href="#pub-static-methods">Public static functions</a></li>
                <li><a href="#typeless-methods">Constructors, destructors, conversion operators</a></li>
                <li><a href="#pub-methods">Public functions</a></li>
              </ul>
            </li>
          </ul>
        </nav>
        <section id="pub-static-attribs">
          <h2><a href="#pub-static-attribs">Public static variables</a></h2>
          <dl class="m-doc">
            <dt>
              static int <a href="#a3fca5e0d9720095041dce1c150d3c9f8" class="m-doc">ConstexprStaticVariable</a> <span class="m-label m-flat m-primary">constexpr</span>
            </dt>
            <dd>Constexpr before static, a variable.</dd>
            <dt>
              static int <a href="#aca521b15a93807423e798f96b1bdde5a" class="m-doc">StaticConstexprVariable</a> <span class="m-label m-flat m-primary">constexpr</span>
            </dt>
            <dd>Constexpr after static, a variable.</dd>
          </dl>
        </section>
        <section id="pub-static-methods">
          <h2><a href="#pub-static-methods">Public static functions</a></h2>
          <dl class="m-doc">
            <dt>
              <span class="m-doc-wrap-bumper">static auto <a href="#a77f46786436a39eb3b53343580f41b89" class="m-doc">constexprStaticFunction</a>(</span><span class="m-doc-wrap">) -&gt; int <span class="m-label m-flat m-primary">constexpr</span></span>
            </dt>
            <dd>Constexpr before static.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">static auto <a href="#a37fb9b85cc5a56110f12460a822112a9" class="m-doc">constevalStaticFunction</a>(</span><span class="m-doc-wrap">) -&gt; int <span class="m-label m-flat m-primary">consteval</span></span>
            </dt>
            <dd>Consteval before static.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">static auto <a href="#a178c5f6f19fa2ffb1fc7a346e2e877d9" class="m-doc">staticConstexprFunction</a>(</span><span class="m-doc-wrap">) -&gt; int <span class="m-label m-flat m-primary">constexpr</span></span>
            </dt>
            <dd>Constexpr after static.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">static auto <a href="#a26b977ac73c54993504324aae7a08e08" class="m-doc">staticConstevalFunction</a>(</span><span class="m-doc-wrap">) -&gt; int <span class="m-label m-flat m-primary">consteval</span></span>
            </dt>
            <dd>Consteval after static.</dd>
          </dl>
        </section>
        <section id="typeless-methods">
          <h2><a href="#typeless-methods">Constructors, destructors, conversion operators</a></h2>
          <dl class="m-doc">
            <dt>
              <span class="m-doc-wrap-bumper"><a href="#ad5953d17211071264b501747c67e6fdc" class="m-doc">Foo</a>(</span><span class="m-doc-wrap"><a href="structFoo.html" class="m-doc">Foo</a>&amp;&amp;) <span class="m-label m-flat m-info">defaulted</span> <span class="m-label m-flat m-success">noexcept</span></span>
            </dt>
            <dd>Combined default and noexcept.</dd>
            <dt>
              <span class="m-doc-wrap-bumper"><a href="#aa5e6af28b3d9578c4c1653ef8a7eb8d5" class="m-doc">Foo</a>(</span><span class="m-doc-wrap">const <a href="structFoo.html" class="m-doc">Foo</a>&amp;) <span class="m-label m-flat m-success">noexcept(…)</span></span>
            </dt>
            <dd>Conditional noexcept.</dd>
          </dl>
        </section>
        <section id="pub-methods">
          <h2><a href="#pub-methods">Public functions</a></h2>
          <dl class="m-doc">
            <dt>
              <span class="m-doc-wrap-bumper">auto <a href="#ad9331e22010cb345be1d123831ecc8a0" class="m-doc">operator=</a>(</span><span class="m-doc-wrap">const <a href="structFoo.html" class="m-doc">Foo</a>&amp;) -&gt; <a href="structFoo.html" class="m-doc">Foo</a>&amp; <span class="m-label m-flat m-danger">deleted</span> <span class="m-label m-flat m-success">noexcept(…)</span></span>
            </dt>
            <dd>Combined conditional noexcept and delete.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">void <a href="#a67e9f6865d19c8e7734b182143d5e9b3" class="m-doc">foo</a>(</span><span class="m-doc-wrap">) const <span class="m-label m-flat m-warning">pure virtual</span> <span class="m-label m-flat m-success">noexcept(…)</span></span>
            </dt>
            <dd>Const, conditional noexcept and a pure virtual.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">auto <a href="#a6c32baeb1c9a472657fd3ee8c191aa07" class="m-doc">bar</a>(</span><span class="m-doc-wrap">) -&gt; <a href="structFoo.html" class="m-doc">Foo</a>&amp; <span class="m-label m-flat m-primary">constexpr</span> <span class="m-label m-flat m-success">noexcept</span></span>
            </dt>
            <dd>Random type and constexpr together.</dd>
            <dt>
              <span class="m-doc-wrap-bumper">auto <a href="#ac8cb68a3567b95476f034d3eb4ba1d66" class="m-doc">baz</a>(</span><span class="m-doc-wrap">) -&gt; decltype(auto) <span class="m-label m-flat m-primary">constexpr</span> <span class="m-label m-flat m-success">noexcept</span></span>
            </dt>
            <dd>decltype(auto) and constexpr together</dd>
          </dl>
        </section>
        <section>
          <h2>Function documentation</h2>
          <section class="m-doc-details" id="a77f46786436a39eb3b53343580f41b89"><div>
            <h3>
              <span class="m-doc-wrap-bumper">static int Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a77f46786436a39eb3b53343580f41b89" class="m-doc-self">constexprStaticFunction</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">constexpr</span></span></span>
            </h3>
            <p>Constexpr before static.</p>
<p>1.8.18 puts both <code>constexpr</code> and <code>static</code> into the return type so I have to remove them. WHY! HOW IS THAT USEFUL IN ANY WAY?!</p>
          </div></section>
          <section class="m-doc-details" id="a37fb9b85cc5a56110f12460a822112a9"><div>
            <h3>
              <span class="m-doc-wrap-bumper">static int Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a37fb9b85cc5a56110f12460a822112a9" class="m-doc-self">constevalStaticFunction</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">consteval</span></span></span>
            </h3>
            <p>Consteval before static.</p>
<p>Same as above, but for C++20&#x27;s consteval.</p>
          </div></section>
          <section class="m-doc-details" id="a178c5f6f19fa2ffb1fc7a346e2e877d9"><div>
            <h3>
              <span class="m-doc-wrap-bumper">static int Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a178c5f6f19fa2ffb1fc7a346e2e877d9" class="m-doc-self">staticConstexprFunction</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">constexpr</span></span></span>
            </h3>
            <p>Constexpr after static.</p>
<p>In this case, <code>static</code> is not in the return type. FFS.</p>
          </div></section>
          <section class="m-doc-details" id="a26b977ac73c54993504324aae7a08e08"><div>
            <h3>
              <span class="m-doc-wrap-bumper">static int Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a26b977ac73c54993504324aae7a08e08" class="m-doc-self">staticConstevalFunction</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">consteval</span></span></span>
            </h3>
            <p>Consteval after static.</p>
<p>Same as above, but for C++20&#x27;s consteval.</p>
          </div></section>
          <section class="m-doc-details" id="ad5953d17211071264b501747c67e6fdc"><div>
            <h3>
              <span class="m-doc-wrap-bumper"> Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#ad5953d17211071264b501747c67e6fdc" class="m-doc-self">Foo</a>(</span><span class="m-doc-wrap"><a href="structFoo.html" class="m-doc">Foo</a>&amp;&amp;) <span class="m-label m-info">defaulted</span> <span class="m-label m-success">noexcept</span></span></span>
            </h3>
            <p>Combined default and noexcept.</p>
<p>Details.</p>
          </div></section>
          <section class="m-doc-details" id="aa5e6af28b3d9578c4c1653ef8a7eb8d5"><div>
            <h3>
              <span class="m-doc-wrap-bumper"> Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#aa5e6af28b3d9578c4c1653ef8a7eb8d5" class="m-doc-self">Foo</a>(</span><span class="m-doc-wrap">const <a href="structFoo.html" class="m-doc">Foo</a>&amp;) <span class="m-label m-success">noexcept(…)</span></span></span>
            </h3>
            <p>Conditional noexcept.</p>
<p>Details.</p>
          </div></section>
          <section class="m-doc-details" id="ad9331e22010cb345be1d123831ecc8a0"><div>
            <h3>
              <span class="m-doc-wrap-bumper"><a href="structFoo.html" class="m-doc">Foo</a>&amp; Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#ad9331e22010cb345be1d123831ecc8a0" class="m-doc-self">operator=</a>(</span><span class="m-doc-wrap">const <a href="structFoo.html" class="m-doc">Foo</a>&amp;) <span class="m-label m-danger">deleted</span> <span class="m-label m-success">noexcept(…)</span></span></span>
            </h3>
            <p>Combined conditional noexcept and delete.</p>
<p>Details.</p>
          </div></section>
          <section class="m-doc-details" id="a67e9f6865d19c8e7734b182143d5e9b3"><div>
            <h3>
              <span class="m-doc-wrap-bumper">void Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a67e9f6865d19c8e7734b182143d5e9b3" class="m-doc-self">foo</a>(</span><span class="m-doc-wrap">) const <span class="m-label m-warning">pure virtual</span> <span class="m-label m-success">noexcept(…)</span></span></span>
            </h3>
            <p>Const, conditional noexcept and a pure virtual.</p>
<p>Details.</p>
          </div></section>
          <section class="m-doc-details" id="a6c32baeb1c9a472657fd3ee8c191aa07"><div>
            <h3>
              <span class="m-doc-wrap-bumper"><a href="structFoo.html" class="m-doc">Foo</a>&amp; Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a6c32baeb1c9a472657fd3ee8c191aa07" class="m-doc-self">bar</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">constexpr</span> <span class="m-label m-success">noexcept</span></span></span>
            </h3>
            <p>Random type and constexpr together.</p>
<p>This is okay.</p>
          </div></section>
          <section class="m-doc-details" id="ac8cb68a3567b95476f034d3eb4ba1d66"><div>
            <h3>
              <span class="m-doc-wrap-bumper">decltype(auto) Foo::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#ac8cb68a3567b95476f034d3eb4ba1d66" class="m-doc-self">baz</a>(</span><span class="m-doc-wrap">) <span class="m-label m-primary">constexpr</span> <span class="m-label m-success">noexcept</span></span></span>
            </h3>
            <p>decltype(auto) and constexpr together</p>
<p>For some reason, due to decltype(auto), Doxygen swaps the order, causing the constexpr to be hard to detect. Don&#x27;t even ask how it handles trailing return types. It&#x27;s just HORRIBLE.</p>
          </div></section>
        </section>
        <section>
          <h2>Variable documentation</h2>
          <section class="m-doc-details" id="a3fca5e0d9720095041dce1c150d3c9f8"><div>
            <h3>
              static int Foo::<wbr /><a href="#a3fca5e0d9720095041dce1c150d3c9f8" class="m-doc-self">ConstexprStaticVariable</a> <span class="m-label m-primary">constexpr</span>
            </h3>
            <p>Constexpr before static, a variable.</p>
<p>1.8.18 again puts both <code>constexpr</code> and <code>static</code> into the return type so I have to remove them.</p>
          </div></section>
          <section class="m-doc-details" id="aca521b15a93807423e798f96b1bdde5a"><div>
            <h3>
              static int Foo::<wbr /><a href="#aca521b15a93807423e798f96b1bdde5a" class="m-doc-self">StaticConstexprVariable</a> <span class="m-label m-primary">constexpr</span>
            </h3>
            <p>Constexpr after static, a variable.</p>
<p>Here <code>static</code> is not in the type either.</p>
          </div></section>
        </section>
      </div>
    </div>
  </div>
</article></main>
</body>
</html>
